import os

import jieba
from matplotlib import pylab as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import json
from pymysql import connect


'''
# 可参考: https://blog.csdn.net/weixin_50804299/article/details/138073969
jieba: 用于中文分词
matplotlib: 用于绘制图表
worldcloud: 词云库
numppy: numpy数据处理库, 用于数值计算
PIL: 图像处理库，用于读取背景图片
stopwords.txt: 常用停用词


步骤:
1.准备文本数据: 准备需要制作词云图的文本数据，如果是中文文本，使用jieba库进行分词处理，以便更好地统计词频；
2.文本清洗: 清洗文本数据，包括去除标点符号、停用词过滤等，以确保只保留有意义的词汇;
3.统计词频: 统计每个词的出现频率，通常是创建一个字典来实现，key是词汇，value是词汇出现的次数；
4.生成词云图: 使用wordcloud。WordCloud类来生成词云图，设置不同参数可自定义词云图的形状、颜色和尺寸等；
5.显示或保存词云图: 使用matplotlib.pylab展示
'''

def getImg(field, targetImageSrc, resImageSrc):
    conn = connect(host='192.168.72.146', port=3306, user='root', password='123456', database='boss_db', charset='utf8mb4')
    cursor = conn.cursor()
    text = ''

    try:
        sql = f'select {field} from job_info;'
        cursor.execute(sql)
        data = cursor.fetchall()
        print(data)

        for i in data:
            # text += i[0]
            if i[0] != '无':
                companyTags = json.loads(i[0])[0].split('，')
                for j in companyTags:
                    text += j

    except Exception as err:
        print(f'------- sql err: {err}')
        pass
    finally:
        cursor.close()
        conn.close()

    print(text)

    print('----------- start.')
    # jieba分词及文本清理停用词
    dataCut = jieba.cut(text, cut_all=False)
    stopWords = []
    # with open('stopwords.txt', 'r', encoding='utf8') as fr:
    #     for line in fr:
    #         if len(line) > 0:
    #             stopWords.append(line.strip())

    dataResult = [x for x in dataCut if x not in stopWords]
    string = ' '.join(dataResult)

    # 定义词频背景图
    maskImage = np.array(Image.open(targetImageSrc))

    # 定义词云样式, 并生成词云
    wc = WordCloud(
        background_color='white',
        mask=maskImage,
        font_path='STHUPO.TTF'
    )
    wc.generate_from_text(string)

    # 绘制图片
    fig = plt.figure(1) # 创建一个新的图形对象
    plt.imshow(wc)      # 显示词云
    plt.axis('off')     # 关闭坐标轴
    plt.savefig(resImageSrc, dpi=800)   # 保存图片
    print('----------- done.')
    return


def createWordCloudImage(text, maskImageName, saveImageName, stopWords=[]):
    path = os.getcwd() + '/static/clouds/'
    maskImageSrc = path + 'source/' + maskImageName
    saveImageSrc = path + saveImageName
    print(f'------------------------------------mask: {maskImageSrc}')
    print(f'------------------------------------save: {saveImageSrc}')

    print(f'---- 当前路径: {os.getcwd()}')
    print(f'---- 当前路径: {os.path.abspath("stopwords.txt")}')
    result = False
    try:
        # jieba分词及文本清理停用词
        dataCut = jieba.cut(text, cut_all=False)
        # stopWords = []
        # with open('stopwords.txt', 'r', encoding='utf8') as fr:
        #     for line in fr:
        #         if len(line) > 0:
        #             stopWords.append(line.strip())

        dataResult = [x for x in dataCut if x not in stopWords]
        string = ' '.join(dataResult)

        # 定义词频背景图
        maskImage = np.array(Image.open(maskImageSrc))

        # 定义词云样式, 并生成词云
        wc = WordCloud(
            background_color='white',
            mask=maskImage,
            font_path='STHUPO.TTF'
        )
        wc.generate_from_text(string)

        # 绘制图片
        fig = plt.figure(1)  # 创建一个新的图形对象
        plt.imshow(wc)  # 显示词云
        plt.axis('off')  # 关闭坐标轴
        plt.savefig(saveImageSrc, dpi=800)  # 保存图片
        result = True
    except Exception as err:
        print(f'------ err: {err}')
        pass
    print('----------- done.')
    return result


def createWordCloudImage2(text, maskImageName, saveImageName, stopWordFile):
    result = False
    try:
        # jieba分词及文本清理停用词
        dataCut = jieba.cut(text, cut_all=False)
        stopWords = []
        if stopWordFile:
            with open(stopWordFile, 'r', encoding='utf8') as fr:
                for line in fr:
                    if len(line) > 0:
                        stopWords.append(line.strip())

        dataResult = [x for x in dataCut if x not in stopWords]
        string = ' '.join(dataResult)

        # 定义词频背景图
        maskImage = np.array(Image.open(maskImageName))

        # 定义词云样式, 并生成词云
        wc = WordCloud(
            background_color='white',
            mask=maskImage,
            font_path='STHUPO.TTF'
        )
        wc.generate_from_text(string)

        # 绘制图片
        fig = plt.figure(1)  # 创建一个新的图形对象
        plt.imshow(wc)  # 显示词云
        plt.axis('off')  # 关闭坐标轴
        plt.savefig(saveImageName, dpi=800)  # 保存图片
        result = True
    except Exception as err:
        print(f'------ err: {err}')
        pass
    print('----------- done.')
    return result



if __name__ == '__main__':
    pass
    maskSrc = '../../static/clouds/source/rabbit.jpg'
    saveSrc = '../../static/clouds/cloudTitle.png'
    # getImg('companyTags', maskSrc, saveSrc)
    # getImg('title', maskSrc, saveSrc)

    text = '''Vue, PythonPython 老师Python 工程师编程 c++ pythonPython 开发工程师Python 全栈python 图像信号算法工程师python 中级研发python 教师Python Developer-ReliabilityPython C++开发Python
开发工程师Python 软件工程师Python 、Java、Go 中级工程师高级 Python 工程师python 后端开发python 工程师PYTHON 后端工程师Python WEB开发Python 初级开发工程师python web后端开发工程师Py
thon Web 开发工程师PYTHON 开发工程师（企业内部系统）高薪 python 开发工程师 兼职也可以 没难度Python爬虫工程师PythonPythonPythonPythonpythonPythonPythonPythonpythonPythonPythonPytho
npythonpythonPythonPythonPython爬虫实习生Python高级爬虫python工程师PythonpythonPythonPythonPythonPythonPythonpythonpythonPythonPythonPythonPythonPythonpython爬虫工程师PythonPython
PythonPythonpythonPythonPythonPythonPythonPythonPythonPythonPythonpython爬虫（24届实习生）PythonPythonpython讲师PythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonP
ythonPythonPython老师Python讲师pythonPythonPythonPythonpythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonPythonpythonPythonPythonPythonPythonPythonPyth
onPythonPythonPythonPythonPythonPythonPythonPythonPythonpython算法python老师Python教师python开发python开发python讲师python开发Python爬虫开发工程师PythonPythonPythonPythonPythonPyt
honPythonPythonPythonpythonPythonPythonPythonPythonPython工程师Python工程师python工程师Python实习生python程序员Python工程师python实习生程序员（python）python程序员对日python开发Py
thon工程师python开发python开发Python开发python开发python老师Python讲师PythonPythonPythonPythonPythonpythonPythonPythonPythonPythonPythonPythonPythonPythonpythonPythonpythonPython
讲师python开发Python教师Python老师Python老师急聘PythonPython开发python开发Python老师python编程老师高级python工程师python编程老师Python开发python后端python讲师北京PythonPython开发P
ython讲师python开发python后端python讲师急聘Pythonpython开发Python老师python老师Python/golangpython老师python开发python老师python开发Python讲师Python后台工程师python编程讲师Python
后端开发软件开发pythonpython开发Python后端python开发python兼职Python老师Python老师Python开发Python讲师Python开发(P)python工程师Python采集开发Python开发python老师Python老师Python老
师python开发Python开发Python开发工程师金牌Python讲师python工程师python实习生python工程师python高级开发Python开发工程师Python开发工程师python高级工程师Python开发工程师Python开发实
习生Python开发工程师python开发工程师Python开发工程师python后端工程师Python开发工程师python研发工程师python课程讲师（兼职）python开发工程师python开发工程师Python开发工程师Python后
端工程师python工程师Python程序员python实习生Python实习生python工程师python工程师python工程师Python工程师scratch，python讲师Python工程师Python工程师Python工程师python实习生python开
发工程师Python开发工程师Python开发工程师Python数据工程师Python开发工程师网页前端制作Shopify网页前端网页前端工程师网页前端工程师网页前端设计师ASP网页前端设计师网页美工/设计/网页前
端WEB 前端Web 前端工程师web 前端开发工程师资深 Web 开发/专家（前端、Node、Java）Web 前端开发工程师web 前端工程师Web 前端Web 前端工程师Web UI前端开发资深前端工程师/专家 web 深圳Web
 前端开发工程师java web 工程师web ui 设计师Java web 后端开发The (Senior) Web Software Engineerweb 前端高级&资深开发工程师web UIweb gis开发Web 开发工程师（Python+JS）'''
    createWordCloudImage2(text, '../../static/clouds/source/rabbit.jpg', '../../static/clouds/titleCloud2.png', 'stopwords.txt')
